package com.filipinas.calculadora;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.Button;
import android.widget.TextView;


public class CalcActivity extends Activity {
	private TextView pant;
	private double numAnt = 0; 
	private double numPost = 0;
	private double resultado = 0;
	private String tipoOperacion = ""; 
	private String pantActual = "";
	private boolean flagResultado = false;
	private boolean flagPunto = false;
	private boolean flagOperacion = false;
	private boolean flagSegundaOperacion = false;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		 super.onCreate(savedInstanceState);
	        setContentView(R.layout.activity_calc);
	        
	        MyListener listener = new MyListener(this);
	        
	        pant = (TextView)findViewById(R.id.pantalla);
	        pant.setText("0");
	        
	        Button b1 = (Button)findViewById(R.id.uno);
	        b1.setOnClickListener(listener);
	        Button b2 = (Button)findViewById(R.id.dos);
	        b2.setOnClickListener(listener);
	        Button b3 = (Button)findViewById(R.id.tres);
	        b3.setOnClickListener(listener);
	        Button b4 = (Button)findViewById(R.id.cuatro);
	        b4.setOnClickListener(listener);
	        Button b5 = (Button)findViewById(R.id.cinco);
	        b5.setOnClickListener(listener);
	        Button b6 = (Button)findViewById(R.id.seis);
	        b6.setOnClickListener(listener);
	        Button b7 = (Button)findViewById(R.id.siete);
	        b7.setOnClickListener(listener);
	        Button b8 = (Button)findViewById(R.id.ocho);
	        b8.setOnClickListener(listener);
	        Button b9 = (Button)findViewById(R.id.nueve);
	        b9.setOnClickListener(listener);
	        Button b0 = (Button)findViewById(R.id.cero);
	        b0.setOnClickListener(listener);
	        Button bMas = (Button)findViewById(R.id.suma);
	        bMas.setOnClickListener(listener);
	        Button bMenos = (Button)findViewById(R.id.resta);
	        bMenos.setOnClickListener(listener);
	        Button bPor = (Button)findViewById(R.id.multiplica);
	        bPor.setOnClickListener(listener);
	        Button bEntre = (Button)findViewById(R.id.divide);
	        bEntre.setOnClickListener(listener);
	        Button bMasMenos = (Button)findViewById(R.id.masMenos);
	        bMasMenos.setOnClickListener(listener);
	        Button bC = (Button)findViewById(R.id.cancel);
	        bC.setOnClickListener(listener);
	        Button bIgual = (Button)findViewById(R.id.igual);
	        bIgual.setOnClickListener(listener);
	        Button bPunto = (Button)findViewById(R.id.punto);
	        bPunto.setOnClickListener(listener);
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.calc, menu);
		return true;
	}
	// Encadena characteres y los muestra por pantalla
	public void addText(String str){
		// Si la pantalla es un resultado la limpia
		if(flagResultado){
			pant.setText("");
			flagResultado = false;
		} 
		if(flagOperacion){
			pant.setText("");
			flagOperacion = false;
		}
		// Si la pantalla es 0 o 0.0 la limpia y escribe
		if(pant.getText().equals("0") || pant.getText().equals("0.0")){
			pant.setText("");
			pantActual = pant.getText().toString()+str;
			pant.setText(pantActual);
		}else{
			pantActual = pant.getText().toString()+str;
			pant.setText(pantActual);
		}
	}

	// Ejecuta la operacion y muestra el resultado por pantalla
	public void resultado(){
		try{
			if(flagSegundaOperacion){
				numAnt = resultado;
			}
			numPost = (Double.parseDouble(pant.getText().toString()));
						
			if (tipoOperacion.equals("+")){
				resultado = numAnt + numPost;
				
			}else if(tipoOperacion.equals("-")){
				resultado = numAnt - numPost;
	
			}else if(tipoOperacion.equals("*")){
				resultado = numAnt * numPost;
	
			}else if(tipoOperacion.equals("/")){
				resultado = numAnt / numPost;
	
			}else{
				resultado = numPost;
			}
			pant.setText(String.valueOf(resultado));
			flagResultado = true;
			flagSegundaOperacion = true;
		}catch(NullPointerException e){
			e.printStackTrace();
//		}catch(NumberFormatException e){
//			tipoOperacion = "";
		}
	}
	
	// Almacena la cadena de la pantalla y guarda el tipo de operacion
	public void operacion(String str) {
		// TODO Auto-generated method stub
		try{
			if(flagSegundaOperacion){
				resultado();
//				pant.setText(String.valueOf(resultado));
				resultado = (Double.parseDouble(pant.getText().toString()));
				tipoOperacion = str;
				flagPunto = false;
			}
			if(flagOperacion == false){
				numAnt = (Double.parseDouble(pant.getText().toString()));
				tipoOperacion = str;
				flagPunto = false;
				flagOperacion = true;
			}
		}catch(NumberFormatException e){
			e.printStackTrace();
		}
	}
	// Cambia el valor de la pantalla a negativo o positivo
	public void cambioSigno(String str){
		if(str.equals("masMenos")){
			if(!pant.getText().equals("") || !pant.getText().equals("0") || !pant.getText().equals("0.0")){
				double a = (Double.parseDouble(pant.getText().toString()));
				double b = a*(-1);
				pant.setText(String.valueOf(b));
				flagSegundaOperacion = false;
			}else{
				addText("-");
			}
		}
	}
	// Reinicia todas la variables
	public void limpiar(String str) {
		// TODO Auto-generated method stub
		if(str.equals("cancel")){
			
			numAnt = 0; 
			numPost = 0;
			resultado = 0;
			tipoOperacion = ""; 
			pantActual = "";
			flagResultado = false;
			flagPunto = false;
			flagOperacion = false;
			flagSegundaOperacion = false;
			pant.setText("0");
		}
	}
	
	public void pintaPunto(String str){
		if(str.equals(".")){
			if(flagPunto == false && (pant.getText().equals("0") || pant.getText().equals("0.0"))){
				addText("0.");
//				Log.i("pintaPunto", "pinto 0. en primer if");
				flagPunto = true;
			}
			if(flagPunto == false && pant.getText().length() > 0){
				addText(".");
				flagPunto = true;
//				Log.i("pintaPunto", "solo pinto un punto");
			}
			if((pant.getText().length() < 1) && flagPunto == false){
				addText("0.");
//				Log.i("pintaPunto", "pinto 0. en segundo if");
				flagPunto = true;
			}
			if(flagSegundaOperacion && flagPunto == false){
				addText("0.");
//				Log.i("pintaPunto", "pinto 0. en tercero if");
				flagPunto = true;
			}
		}
	}

	public boolean isFlagPunto() {
		return flagPunto;
	}

	public void setFlagPunto(boolean flagPunto) {
		this.flagPunto = flagPunto;
	}

	public boolean isFlagResultado() {
		return flagResultado;
	}

	public boolean setFlagResultado(boolean flagResultado) {
		this.flagResultado = flagResultado;
		return flagResultado;
	}
	
	
}
